package com.tabnet.servlet;

import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.tabnet.beans.personnes.Fournisseur;
import com.tabnet.beans.personnes.Gestionnaire;
import com.tabnet.dao.DAOException;
import com.tabnet.dao.DAOFactory;
import com.tabnet.dao.DAOFournisseur;
import com.tabnet.dao.FournisseurDAOImpl;
import com.tabnet.form.ConnexionGestForm;

public class ConnexionGest extends HttpServlet {
	public static final String CONF_DAO_FACTORY 	= "daofactory";
	
    public static final String ATT_USER        		= "gestionnaire";
    public static final String ATT_FORM         	= "form";
    public static final String ATT_SESSION_USER 	= "sessionGestionnaire";
    public static final String SESSION_FOURNISSEURS = "fournisseurs";
    
    public static final String VUE              	= "/WEB-INF/connexionGest.jsp";
    public static final String VUE_SUCCES 	    	= "/admin/accueil.jsp";

    private DAOFournisseur fournDao;

    public void init() throws ServletException {
        /* Récupération d'une instance de notre DAO Utilisateur */
        
    }
    
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* Affichage de la page de connexion */
        this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
    }

    public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        /* Préparation de l'objet formulaire */
    	ConnexionGestForm form = new ConnexionGestForm();
    	
    	try {
			this.fournDao = new FournisseurDAOImpl( DAOFactory.getInstance() );// DAOFactory.getInstance().getFournisseurDao();
		} catch (DAOException e1) {
			e1.printStackTrace();
		}

        /* Traitement de la requête et récupération du bean en résultant */
        Gestionnaire gest = form.connecterGest( request );

        /* Récupération de la session depuis la requête */
        HttpSession session = request.getSession();

        /* Stockage du formulaire et du bean dans l'objet request */
        request.setAttribute( ATT_FORM, form );
        request.setAttribute( ATT_USER, gest );

        /**
         * Si aucune erreur de validation n'a eu lieu, alors ajout du bean
         * gestionnaire à la session, sinon suppression du bean de la session.
         */
        if ( form.getErreurs().isEmpty() ) {
            session.setAttribute( ATT_SESSION_USER, gest );
            
            HashMap<String, Fournisseur> lesFournisseurs = null;
			try {
				lesFournisseurs = fournDao.lister();
			} catch (DAOException e) {
				e.printStackTrace();
			}


            /* Si aucune map n'existe, alors initialisation d'une nouvelle map */
            
            session.setAttribute( SESSION_FOURNISSEURS, lesFournisseurs );
            
            
            response.sendRedirect( request.getContextPath() + VUE_SUCCES );
        } else {
            session.setAttribute( ATT_SESSION_USER, null );
            this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
        }
    }
}
